package org.db.ui;

import java.util.List;

import javax.swing.JTable;

import org.db.Manager;
import org.db.dao.LageskizzenWeichenDAO;

public class LageskizzenWeichenTable extends JTable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -423813588213775465L;

	private ColorTableCellRenderer renderer;

	public LageskizzenWeichenTable() {
		setModel(new LageskizzenWeichenTableModel());
		registerCellRenderer();
		// Tabelle initial mit bisherigen LageskizzenWeichen füllen
		((LageskizzenWeichenTableModel) getModel())
				.addLageskizzenWeichen(Manager.getInstance()
						.getLageskizzenWeichen());
	}

	public void addLageskizzenWeiche(LageskizzenWeichenDAO dao) {
		((LageskizzenWeichenTableModel) getModel()).addLageskizzenWeiche(dao);
	}

	public void replaceWeichenElement(LageskizzenWeichenDAO oldDao,
			LageskizzenWeichenDAO newDao) {
		((LageskizzenWeichenTableModel) getModel()).replaceWeichenElement(
				oldDao, newDao);
	}

	public LageskizzenWeichenDAO getElementAtRow(int row) {
		return ((LageskizzenWeichenTableModel) getModel()).getElementAtRow(row);
	}

	public List<LageskizzenWeichenDAO> getWeichenElemente() {
		return ((LageskizzenWeichenTableModel) getModel()).getWeichenElemente();
	}

	public void refresh() {
		((LageskizzenWeichenTableModel) getModel()).fireTableDataChanged();
	}

	public void removeWeichenElement(LageskizzenWeichenDAO dao) {
		((LageskizzenWeichenTableModel) getModel()).removeWeichenElement(dao);
	}

	public LageskizzenWeichenDAO removeWeichenElement(int rowIndex) {
		return ((LageskizzenWeichenTableModel) getModel())
				.removeWeichenElement(rowIndex);
	}

	public void highlightCell(int row, int column) {
		renderer.highlightCell(row, column);
		refresh();
	}

	/**
	 * Highlighting der Zellen aufheben.
	 */
	public void resetHighlighting() {
		renderer.reset();
		refresh();
	}

	public boolean isEmpty() {
		return ((LageskizzenWeichenTableModel) getModel()).isEmpty();
	}

	private void registerCellRenderer() {
		renderer = new ColorTableCellRenderer();
		for (int i = 0; i < getColumnModel().getColumnCount(); i++) {
			getColumnModel().getColumn(i).setCellRenderer(renderer);
		}
	}

}
